// 实现内置的 Exclude<T, U> 类型，但不能直接使用它本身。

// 从联合类型 T 中排除 U 中的类型，来构造一个新的类型。
// type MyExclude<T, U> = {
//   [P in keyof T as P extends U ? never : P]: T[P];
// };
type MyExclude<T, U> = T extends U ? never : T;
type Result = MyExclude<"a" | "b" | "c", "a">; // 'b' | 'c'

// 这和上面的不一样
type A = "s" | "n" | "p";
type B = "s" | "n";
type C = A extends B ? never : A; // 's' | 'n' | 'p'

type Arr = ["1", "2", "3"];
// type TupleToUnion<T extends any[]> = T[number];
type TupleToUnion<T> = T extends Array<infer R> ? R : never;
type Test = TupleToUnion<Arr>; // expected to be '1' | '2' | '3'

